package config

import (
	"github.com/spf13/viper"
	"log"
	"os"
	"path/filepath"
	"zin/config/items"
	_const "zin/framework/const"
	"zin/framework/util"
)

type conf struct {
	Mysql items.Mysql  `json:"mysql" mapstructure:"mysql"`
	Log   items.Logger `json:"log" mapstructure:"log"`
	Swag  items.Swag   `json:"swag" mapstructure:"swag"`
	App   items.App    `json:"app" mapstructure:"app"`
	Redis items.Redis  `json:"redis" mapstructure:"redis"`
	Cache items.Cache  `json:"cache" mapstructure:"cache"`
	Gorm  items.Gorm   `json:"gorm" mapstructure:"gorm"`
}

var Conf *conf

func InitConfig(baseFolder string) {
	log.Println("init global config...")

	//读取环境变量 APP_ENV
	envService := util.GetEnvProvider()
	env := envService.Env()

	configFile := filepath.Join(baseFolder, _const.ConfigFolder, env, "config.yaml")

	_, err := os.Stat(configFile)
	if err != nil {
		log.Fatalln("配置文件不存在", configFile)
	}
	//設置配置文件
	viper.SetConfigFile(configFile)

	//讀取配置文件
	readErr := viper.ReadInConfig() // 读取配置信息
	if readErr != nil {             // 读取配置信息失败
		log.Fatalln("讀取配置文件失敗", readErr)
	}

	vipErr := viper.Unmarshal(&Conf)
	if vipErr != nil {
		log.Fatalln("解析配置文件失敗", vipErr)
	}
}
